var listaCompleta;


var prov = prov || {
    urlServicioId:'/dosideas-jee001-workshop/app/provincia/',
    urlServicioNombre:'/dosideas-jee001-workshop/app/provincia/nombre/',
    urlServicioTodas:'/dosideas-jee001-workshop/app/provincia/todas',

    exito: function(data){
        mensaje.ocultar.error();
        var tbody = $("#tablaProvincias tbody");
        $("tr", tbody).remove();
        $('#provinciasTemplate')
        .tmpl(data)
        .appendTo(tbody);
    },
    error:function(){
        console.log("Error al obtener el servicio.");
        var tbody = $("#tablaProvincias tbody");
        $("tr", tbody).remove();
        $('#divMensajeError').show();
    },

    setListado:function(valor){
        listaCompleta = valor;
        prov.exito(listaCompleta);
    },
    actualizar: function(){
        servicioRest.get(prov.urlServicioTodas,this.setListado,this.error);
    },
    limpiarElemento: function(idElemento){
        var elem = document.getElementById(idElemento);
        $(elem).val("");
    },
    
    buscar:function(fComparacion,source,elemBuscado,fOk,fError){
        var coincidencias = [];
        
        if(!source || !fComparacion || !elemBuscado){
            fError("Parametro erroneo");
        }
        for(var i=0; i<source.length; i++){
            if (fComparacion(elemBuscado,source[i])){
                coincidencias.push(source[i]);
            }
        }
        fOk(coincidencias);
        
    },
    buscarPorId:function(){
        prov.limpiarElemento('tNombreProvincia');
        
        var idProvincia = $("#tIdProvincia").val();
           
        if(prov.verificaciones.idNumerico(idProvincia)){
            var fComp = function(idBuscado,provincia){
                return provincia.id == idBuscado;
            }
            prov.buscar(fComp,listaCompleta,idProvincia,prov.exito,prov.error);
        }
    },
    buscarPorNombre:function(){
        prov.limpiarElemento('tIdProvincia');
        
        var nombreProvincia = $("#tNombreProvincia").val();
        var fComp = function(nombreBuscado,provincia){
            var actual = provincia.nombre.toLowerCase();
            return (actual.indexOf(nombreBuscado.toLowerCase()) != -1);
        }
        prov.buscar(fComp,listaCompleta,nombreProvincia,prov.exito,prov.error);
    },
    limpiarCriterios: function(){
        $("#tIdProvincia").val("");
        $("#tNombreProvincia").val("");

        prov.exito(listaCompleta);
    },
    verificaciones: (function(){
        return {
            idNumerico: function(parametro){
                mensaje.ocultar.todos();
                var mensajes=new Array;

                if(!isNaN(parametro)){
                    return true;
                }
                else{
                    mensajeIdNumerico = {
                        mensaje: 'El id debe ser numérico'
                    };
                    mensajes.push(mensajeIdNumerico);
                    mensaje.mostrar.error(mensajes);
                }
                return false;
            }
        }
    })()
};


$(document).ready(function() {
    mensaje.ocultar.error();
    prov.actualizar();
    $("#tIdProvincia").on("keyup",prov.buscarPorId);
    $("#tNombreProvincia").on("keyup",prov.buscarPorNombre);
    $("#divBotonLimpiarCriterios").on("click",prov.limpiarCriterios);
    
});
